#pragma once
#include <Rz/Object.h>
#include <Rz/Graphics/Render/Geometry.h>
#include <Rz/Graphics/Materials/MaterialBase.h>
#include <Rz/Graphics/Render/IRasterizerState.h>
#include <Rz/Graphics/Render/Libraries/OpenGL/GL.h>
#include "Node.h"

RZ_CLASS_FWD_DECL3(Rz, Graphics, Scene, CameraNode);

namespace Rz { namespace Graphics { namespace Scene {

class MeshNode :
	public Node
{
	public:
		RZ_RTTI(Rz::Graphics::Scene, MeshNode);
		RZ_RTTI_IMPLEMENTS(Node);
		RZ_RTTI_END;

		MeshNode();

		const Render::Geometry* GetGeometry() const;
		Render::Geometry* GetGeometry();
		void SetGeometry(Render::Geometry* geometry);

		const Materials::MaterialBase* GetMaterial() const;
		Materials::MaterialBase* GetMaterial();
		void SetMaterial(Materials::MaterialBase* material);

		const Render::IRasterizerState* GetRasterizerState() const;
		Render::IRasterizerState* GetRasterizerState();
		void SetRasterizerState(Render::IRasterizerState* rasterizerState);

	private:
		Ptr<Render::Geometry> _geometry;
		Ptr<Materials::MaterialBase> _material;
		Ptr<Render::IRasterizerState> _rasterizerState;
};

} } }
